/**
 * 
 */
package remato.domain.common;

import java.util.Set;

import remato.common.domain.helpers.Nameable;

/**
 * @author Petter L. H. Eide
 *
 */
public interface UseCase extends Nameable {

	public Set<Actor> getActors();
	
    /**
     * @return <tt>true</tt> if this set did not already contain the specified
     *         element.
     */
	public boolean addActor(Actor actor);
	
	/**
     * @return <tt>true</tt> if this collection changed as a result of the
     *         call
	 */
	public boolean removeActor(Actor actor);
	
	public Set<UseCase> getExtendedUseCases();
	
    /**
     * @return <tt>true</tt> if this set did not already contain the specified
     *         element.
     */
	public boolean addExtendedUseCase(UseCase useCase);
	
	/**
     * @return <tt>true</tt> if this collection changed as a result of the
     *         call
	 */
	public boolean removeExtendedUseCase(UseCase useCase);

	public Set<UseCase> getIncludedUseCases();
	
    /**
     * @return <tt>true</tt> if this set did not already contain the specified
     *         element.
     */
	public boolean addIncludedUseCase(UseCase useCase);
	
	/**
     * @return <tt>true</tt> if this collection changed as a result of the
     *         call
	 */
	public boolean removeIncludedUseCase(UseCase useCase);

	/**
	 * Specialized UseCases refers to the UML notation Generalization.
	 */
	public Set<UseCase> getSpecializedUseCases();
	
    /**
	 * Specialized UseCases refers to the UML notation Generalization.
	 * 
     * @return <tt>true</tt> if this set did not already contain the specified
     *         element.
     */
	public boolean addSpecializedUseCase(UseCase useCase);
	
	/**
	 * Specialized UseCases refers to the UML notation Generalization.
	 * 
     * @return <tt>true</tt> if this collection changed as a result of the
     *         call
	 */
	public boolean removeSpecializedUseCase(UseCase useCase);
}
